<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计时器</title>
</head>
<body>
<script>

//使用setTimeout模拟出setInterval效果 setTimeout是一个倒计时 只要在倒计时结束之后再调用一次自身就能实现出与setInterval类似的效果

/*let timeoutId =setTimeout(function foo (){
    console.log(1111)
    timeoutId = setTimeout(foo,2000)

},2000)*/

console.log("----------")

//使用setTimeout模拟出的setInterval更加灵活,可以灵活控制下一次循坏的时间
/*
* 可以控制第一次的执行时间和后面的执行时间
* 特例:可以设置第一次执行为0秒 后面为指定时间
*
* */

function  delay(fn,ms){

    let timer = setTimeout(function f(){
        fn()
        ms+=1000
        timer = setTimeout(f,ms)
    },ms)

}

function log(){
    console.log(new Date())
}
    delay(log,1000)


//使用setTimeout模拟出的setInterval更加精确
/*
* 如果定时器里的函数的执行耗时超过了2秒那么这里的计时器会不起作用 以为他只是机械的到时间就会执行
* */
 let timer1 = setInterval(()=>{
    console.log(new Date())
},2000)

 let timer2 = setTimeout(function fn(){
     console.log(new Date())
     /*这里的计时只会在函数运行结束后执行 不管逻辑耗时多久都会在逻辑执行2S后执行*/
     setTimeout(fn,2000)
 },2000)







</script>
</body>
</html>